package com.hhf.stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @Author hhf
 * @Date 2024/6/16
 * @Description map与flatMap
 * //        map只是一维 1对1 的映射
 * //        而flatmap可以将一个2维的集合映射成一个一维,相当于他映射的深度比map深了一层。
 * //        说的专业点就是，各个流会被合并或者扁平化为一个单一的流。
 */
public class StreamDemo4 {

    public static void main(String[] args) {


        //案例1
        ArrayList<Integer> lista = new ArrayList<>();   //a = [1,3]
        lista.add(1);
        lista.add(3);

        ArrayList<Integer> listb = new ArrayList<>();   //b = [2,4]
        listb.add(2);
        listb.add(4);

        ArrayList<List<Integer>> listc = new ArrayList<>(); //c = [[1, 3], [2, 4]]
        listc.add(lista);
        listc.add(listb);

        System.out.println(listc);

        List<Integer> collect = listc.stream().flatMap(ele -> ele.stream()).collect(Collectors.toList());

        System.out.println(collect);


        System.out.println("===========================================================");

        //案例2
        String[] array = {"hello","world"};
        Stream<String> stream = Arrays.stream(array);


//        List<Stream<String>> collect1 = stream.map(s -> s.split("")).map(Arrays::stream).collect(Collectors.toList());
//        System.out.println(collect1);   //[[h,e,l,l,o],[w,o,r,l,d]]


        List<String> collect2 = stream.map(s -> s.split("")).flatMap(Arrays::stream).collect(Collectors.toList());
        System.out.println(collect2);   //[h, e, l, l, o, w, o, r, l, d]

    }
}
